4 REM   ******************************************
6 REM   ** (DFT4.01A) GENERATE/ANALYZE WAVEFORM **
8 REM   ******************************************
10 Q=32
12 PI=3.141592653589793#:P2=2*PI:K1=P2/Q:K2=1/PI
14 DIM C(2,Q),S(2,Q),KC(2,Q),KS(2,Q)
16 CLS:FOR J=0 TO Q:FOR I=1 TO 2:C(I,J)=0:S(I,J)=0:NEXT:NEXT
20 CLS:REM *    MAIN MENU    *
22 PRINT:PRINT:PRINT "         MAIN MENU":PRINT
24 PRINT " 1 = SIMILARITY THEOREM":PRINT
31 PRINT " 2 = EXIT":PRINT:PRINT
32 PRINT SPC(10);"MAKE SELECTION";
34 A$ = INKEY$:IF A$="" THEN 34
36 A=VAL(A$):ON A GOSUB 300,1000
38 GOTO 20
40 CLS:N=1:M=2:K5=Q:K6=-1:GOSUB 108
42 FOR J=0 TO Q:C(2,J)=0:S(2,J)=0:NEXT
44 GOSUB 200: REM - PERFORM DFT
46 GOSUB 140: REM - PRINT OUT FINAL VALUES
48 PRINT:INPUT "C/R TO CONTINUE";A$
50 RETURN
80 CLS:GOSUB 150:REM PRINT HEADING
81 FOR I=0 TO Q-1:C(1,I)=0:S(1,I)=0:NEXT
82 N=2:M=1:K5=1:K6=1
84 GOSUB 200:REM INVERSE TRANSFORM
86 GOSUB 140:REM PRINT OUTPUT
88 PRINT:INPUT "C/R TO CONTINUE";A$
90 RETURN
100 REM  ******************************************
102 REM  *         PROGRAM SUBROUTINES            * 
104 REM  ****************************************** 
106 REM  *       PRINT COLUMN HEADINGS            * 
108 PRINT:PRINT :IF COR$="P" THEN 116
110 PRINT "FREQ    F(COS)      F(SIN)      FREQ     F(COS)    F(SIN)"
112 PRINT 
114 RETURN 
116 PRINT "FREQ      F(MAG)       F(THETA)    FREQ       F(MAG)     F(THETA)"
118 GOTO 112
137 REM ******************************
138 REM *       PRINT OUTPUT         * 
139 REM ******************************
140 IF COR$="P" AND M=2 THEN GOSUB 170
141 FOR Z=0 TO Q/2-1
142 PRINT USING "##_     ";Z;
144 PRINT USING "+###.#####_    ";C(M,Z),S(M,Z);
145 PRINT USING "##_    ";(Z+Q/2);
146 PRINT USING "+###.#####_    ";C(M,Z+Q/2),S(M,Z+Q/2)
147 NEXT Z
148 RETURN 
150 REM ******************************
152 REM *    PRINT COLUMN HEADINGS   *
154 PRINT
156 PRINT "                       RECONSTRUCTION":PRINT
158 PRINT " T                              T":PRINT
160 RETURN
170 REM CONVERT FROM RECTANGULAR TO POLAR COORDINATES
172 FOR I=0 TO Q-1
174 MAG=SQR(C(M,I)^2+S(M,I)^2)
175 IF C(M,I)=0 THEN 190
176 ANGLE =180/PI*ATN(S(M,I)/C(M,I))
177 IF C(M,I)>0 THEN S(M,I)=ANGLE:GOTO 180
178 IF ANGLE>0 THEN S(M,I)=ANGLE-180
179 IF ANGLE<0 THEN S(M,I)=ANGLE+180
180 C(M,I)=MAG:NEXT
182 RETURN
190 IF S(M,I)=0 THEN S(M,I)=0:GOTO 180
192 S(M,I)=90:GOTO 180
200 REM *******************************
202 REM *     TRANSFORM/RECONSTRUCT   *
204 REM *******************************
206 FOR J=0 TO Q-1:REM SOLVE EQNS FOR EACH FREQUENCY
208 FOR I=0 TO Q-1:REM MULTIPLY AND SUM EACH POINT
210 C(M,J)=C(M,J)+C(N,I)*COS(J*I*K1)+K6*S(N,I)*SIN(J*I*K1)
211 S(M,J)=S(M,J)-K6*C(N,I)*SIN(J*I*K1)+S(N,I)*COS(J*I*K1)
212 NEXT I
214 C(M,J)=C(M,J)/K5:S(M,J)=S(M,J)/K5:REM SCALE RESULTS
216 NEXT J
218 RETURN
220 REM *******************************
222 REM *        PLOT FUNCTIONS       *
224 REM *******************************
225 SFF=16:SFT=64
226 SCREEN 9,1,1,1:COLOR 9,1,1:CLS:YF=-1:YT=-1
228 LINE (0,5) - (0,155):LINE (0,160)- (0,310)
230 LINE (0,155) - (600,155):LINE (0,310)-(600,310)
232 GOSUB 266
234 COLOR 15,1,1
236 FOR N=0 TO Q-1
238 GOSUB 260
240 LINE (X,Y) - (X,Y):LINE (X,Z)-(X,Z)
242 NEXT N
244 LOCATE 2,10:PRINT "FREQUENCY DOMAIN (MAG)"
246 LOCATE 14,12:PRINT "TIME DOMAIN"
248 LOCATE 24,1
250 INPUT "C/R TO CONTINUE";A$
252 SCREEN 0,0,0
254 RETURN
256 REM *******************************
260 Y=SQR(C(2,N)^2+S(2,N)^2):Y=155-(YF*Y)
262 X=N*600/Q:Z=310-(YT*C(1,N))
264 RETURN
265 REM *******************************
266 YF=150/SFF:YT=150/SFT:LINE (0,5)-(5,5):LINE (0,80)-(5,80)
268 LINE (0,160)-(5,160):LINE (0,235)-(5,235)
270 LOCATE 1,2:PRINT SFF :LOCATE 6,2:PRINT SFF/2
272 LOCATE 12,2:PRINT SFT :LOCATE 17,2:PRINT SFT/2
274 RETURN
299 REM *******************************
300 CLS:REM *   SIMILARITY THEOREM    *
301 REM *******************************
302 GOSUB 900
304 FOR I=0 TO Q-1:C(1,I)=0:S(1,I)=0
306 FOR J=1 TO 2:KC(J,I)=0:KS(J,I)=0:NEXT:NEXT
308 CLS:PRINT "WIDTH =";F9
310 INPUT "WIDTH ";F9
312 IF F9>Q/2 THEN PRINT Q/2;" COMPONENTS IS MAXIMUM":F9=Q/2
314 IF F9<1 THEN PRINT "1 COMPONENT IS MINIMUM":F9=1
316 PRINT SPC(13);"SIMILARITY TEST - WIDTH =";F9
318 FOR I=Q/2-F9 TO Q/2+F9:C(1,I)=Q*(SIN(PI*(I-(Q/2-F9))/(2*F9)))^2:NEXT
320 GOSUB 158:REM PRINT HEADING
322 M=1:GOSUB 140:REM PRINT INPUT FUNCTION
324 PRINT:INPUT "C/R TO CONTINUE";A$
326 GOSUB 40:REM TAKE XFORM
328 GOSUB 220:REM PLOT DATA
330 PRINT "MORE (Y/N)?";
332 A$=INKEY$:IF A$="" THEN 332
334 IF A$="Y" OR A$="y" THEN 304
336 RETURN
396 RETURN
900 CLS:SCREEN 9,1,1:COLOR 15,1,1:REM TEST DESCRIPTION
902 FOR DACNT=1 TO 11
904 READ A$:PRINT A$
906 NEXT
908 INPUT "C/R TO CONTINUE";A$
910 SCREEN 0,0,0:RETURN
920 DATA "                SIMILARITY THEOREM TEST"
922 DATA " "
924 DATA "This routine illustrates the Similarity Theorem by generating a"
926 DATA "single cycle of SIN^2 wave.  The number of data points over which  "
928 DATA "this function is spread is specified by the variable F9, which the"
930 DATA "user is asked to specify at the beginning of the illustration.  By "
932 DATA "specifying various widths of the function and observing the "
934 DATA "resulting changes in the spectrum the similarity phenomenon is"
936 DATA "completely demonstrated."
938 DATA " "
940 DATA " "
942 DATA " "
1000 STOP
